home *** CD-ROM | disk | FTP | other *** search
/ Compendium Deluxe 1 / LSD Compendium Deluxe 1.iso / a / programming / assembly / copperfun.lha / waves.s < prev    next >
Encoding:
Text File  |  1992-12-31  |  7.5 KB  |  287 lines

  1. ***********************************************************
  2. * This little program shows how to use the BPLxMOD registers
  3. * to produce a neat "wavy" effect.
  4. * 1992 Epsilon
  5. ***********************************************************
  6.  
  7. WaitVblank    MACRO
  8. .\@1        move.l    4(a5),d0
  9.         andi.l    #$3ff00,d0
  10.         cmpi.l    #$0f300,d0
  11.         bne.b    .\@1
  12. .\@2        move.l    4(a5),d0
  13.         andi.l    #$3ff00,d0
  14.         cmpi.l    #$0f400,d0
  15.         bne.b    .\@2
  16.         ENDM
  17.  
  18. ***********************************************************
  19.  
  20.         bsr.w    TakeSystem
  21. MouseWait:    WaitVblank        ; wait for two or it goes too fast.
  22.         WaitVblank
  23.  
  24.         bsr.s    DoWaves    
  25.  
  26.         btst.b    #6,$bfe001
  27.         bne.s    MouseWait
  28.  
  29.         bsr.w    RestoreSystem
  30.         rts            ; Done!
  31.  
  32. ***********************************************************    
  33.  
  34. DoWaves:    lea    wavestart+6,a1    ; first line to wave in copper
  35.         moveq    #13,d0        ; number of times to loop
  36.         move.l    Wave_Ptr,a0    ; move ptr. to table to a0
  37.         cmpi.w    #$ffff,(a0)    ; end of list?
  38.         bne.s    wave_it        ; no
  39.         lea    Wave_Table,a0    ; start of list
  40.  
  41. wave_it:    move.w    (a0)+,(a1)+    ; move new modulo value to copper
  42.         addq.l    #6,a1        ; get next line in copper
  43.         cmpi.w    #$ffff,(a0)    ; end of list?
  44.         bne.s    wave_ok        ; no
  45.         lea    Wave_Table,a0    ; back to start of wave table
  46. wave_ok:    dbra    d0,wave_it    ; loop
  47.  
  48.         move.l    a0,Wave_Ptr    ; new position in table
  49.         rts    
  50.  
  51. ***********************************************************    
  52.  
  53. TakeSystem:    move.l    #$dff000,a5        ; Custom chip base
  54.     
  55.         bsr.w    InstallBmap
  56.         bsr.w    InstallSprites
  57.         move.l    #Copper,$80(a5)        ; install copper
  58.         rts                ; Done
  59.  
  60. ***********************************************************
  61.  
  62. RestoreSystem:    move.l    #$dff000,a5        ; Custom chip base
  63.  
  64.         movea.l    4.w,a6            ; ExecBase
  65.         lea    GraphicsName,a1        ; "graphics.library"
  66.         jsr    -$198(a6)        ; OldOpenLibrary()
  67.         move.l    d0,a1            ; Copy ptr to GfxBase
  68.         move.l    $26(a1),$80(a5)        ; Install old system copperlist
  69.         jsr    -$19e(a6)        ; CloseLibrary()
  70.         jsr    -$8a(a6)        ; Permit() multitasking
  71.         rts                ; Done
  72.  
  73. ***********************************************************    
  74.  
  75. InstallBmap:    lea    bmapptrs+2,a0
  76.         move.l    #Bmap,d0    ; say our bmap address is $12345678
  77.         move.w    d0,4(a0)    ;   write $5678 to $e2 reg in clist
  78.         swap    d0    
  79.         move.w    d0,(a0)        ;   write $1234 to $e0
  80.         rts
  81.  
  82. ***********************************************************    
  83.  
  84. InstallSprites:    lea    sprptrs+2,a0
  85.         move.l    #NullSprite,d0        
  86.         move.w    d0,4(a0)
  87.         move.w    d0,12(a0)
  88.         move.w    d0,20(a0)
  89.         move.w    d0,28(a0)
  90.         move.w    d0,36(a0)
  91.         move.w    d0,44(a0)
  92.         move.w    d0,52(a0)
  93.         move.w    d0,60(a0)
  94.         swap    d0
  95.         move.w    d0,(a0)    
  96.         move.w    d0,8(a0)
  97.         move.w    d0,16(a0)
  98.         move.w    d0,24(a0)
  99.         move.w    d0,32(a0)
  100.         move.w    d0,40(a0)
  101.         move.w    d0,48(a0)
  102.         move.w    d0,56(a0)
  103.         rts
  104.  
  105. ***********************************************************
  106.  
  107.         section amazin_fruit,data
  108.  
  109. Wave_Table:
  110.     dc.w    40,0,0,0,0,0,0        ; each raster line if 40 bytes
  111.     dc.w    0,0,0,0,0,0,0        ;   wide, so it is best to skip
  112.     dc.w    40,0,0,0,0,0,0        ;   a multipe of 40
  113.     dc.w    0,0,0,0,0,0,0        ; a value of 40 skips on line
  114.     dc.w    40,0,40,0,0,0,0        ;   and a value of -40 does the
  115.     dc.w    0,0,0,0,0,0,0        ;   same line twice
  116.     dc.w    40,0,40,0,0,0,0
  117.     dc.w    0,0,0,0,0,0,0
  118.     dc.w    40,0,40,0,40,0,0
  119.     dc.w    0,0,0,0,0,0,0
  120.     dc.w    40,0,40,0,40,0,0
  121.     dc.w    0,0,0,0,0,0,0
  122.     dc.w    40,0,40,0,40,0,40
  123.     dc.w    0,0,0,0,0,0,0
  124.     dc.w    40,0,40,0,40,0,40
  125.     dc.w    40,0,0,0,0,0,0
  126.     dc.w    40,0,40,0,40,0,40
  127.     dc.w    40,0,0,0,0,0,0
  128.     dc.w    40,0,40,0,40,0,40
  129.     dc.w    40,0,40,0,0,0,0
  130.     dc.w    40,0,40,0,40,0,40
  131.     dc.w    40,0,40,0,0,0,0
  132.     dc.w    40,0,40,0,40,0,40
  133.     dc.w    40,0,40,0,40,0,0
  134.     dc.w    40,0,40,0,40,0,40
  135.     dc.w    40,0,40,0,40,0,0
  136.     dc.w    40,0,40,0,40,0,40
  137.     dc.w    40,0,40,0,40,0,40
  138.  
  139.     dc.w    40,0,40,0,40,0,40
  140.     dc.w    40,0,40,0,40,0,0
  141.     dc.w    40,0,40,0,40,0,40
  142.     dc.w    40,0,40,0,40,0,0
  143.     dc.w    40,0,40,0,40,0,40
  144.     dc.w    40,0,40,0,0,0,0
  145.     dc.w    40,0,40,0,40,0,40
  146.     dc.w    40,0,40,0,0,0,0
  147.     dc.w    40,0,40,0,40,0,40
  148.     dc.w    40,0,0,0,0,0,0
  149.     dc.w    40,0,40,0,40,0,40
  150.     dc.w    40,0,0,0,0,0,0
  151.     dc.w    40,0,40,0,40,0,40
  152.     dc.w    0,0,0,0,0,0,0
  153.     dc.w    40,0,40,0,40,0,0
  154.     dc.w    0,0,0,0,0,0,0
  155.     dc.w    40,0,40,0,40,0,0
  156.     dc.w    0,0,0,0,0,0,0
  157.     dc.w    40,0,40,0,0,0,0
  158.     dc.w    0,0,0,0,0,0,0
  159.     dc.w    40,0,40,0,0,0,0
  160.     dc.w    0,0,0,0,0,0,0
  161.     dc.w    40,0,0,0,0,0,0
  162.     dc.w    0,0,0,0,0,0,0
  163.     dc.w    40,0,0,0,0,0,0
  164.     dc.w    0,0,0,0,0,0,0
  165.     dc.w    0,0,0,0,0,0,0
  166.     dc.w    0,0,0,0,0,0,0
  167.  
  168.     dc.w    -40,0,0,0,0,0,0        
  169.     dc.w    0,0,0,0,0,0,0        
  170.     dc.w    -40,40,0,0,0,0,0        
  171.     dc.w    0,0,0,0,0,0,0        
  172.     dc.w    -40,40,-40,0,0,0,0    
  173.     dc.w    0,0,0,0,0,0,0        
  174.     dc.w    -40,40,-40,40,0,0,0
  175.     dc.w    0,0,0,0,0,0,0
  176.     dc.w    -40,40,-40,40,-40,0,0
  177.     dc.w    0,0,0,0,0,0,0
  178.     dc.w    -40,40,-40,40,-40,40,0
  179.     dc.w    0,0,0,0,0,0,0
  180.     dc.w    -40,40,-40,40,-40,40,-40
  181.     dc.w    0,0,0,0,0,0,0
  182.     dc.w    -40,40,-40,40,-40,40,-40
  183.     dc.w    -40,0,0,0,0,0,0
  184.     dc.w    -40,40,-40,40,-40,40,-40
  185.     dc.w    -40,40,0,0,0,0,0
  186.     dc.w    -40,40,-40,40,-40,40,-40
  187.     dc.w    -40,40,-40,0,0,0,0
  188.     dc.w    -40,40,-40,40,-40,40,-40
  189.     dc.w    -40,40,-40,40,0,0,0
  190.     dc.w    -40,40,-40,40,-40,40,-40
  191.     dc.w    -40,40,-40,40,-40,0,0
  192.     dc.w    -40,40,-40,40,-40,40,-40
  193.     dc.w    -40,40,-40,40,-40,40,0
  194.     dc.w    -40,40,-40,40,-40,40,-40
  195.     dc.w    -40,40,-40,40,-40,40,-40
  196.  
  197.     dc.w    -40,40,-40,40,-40,40,-40
  198.     dc.w    -40,40,-40,40,-40,40,0
  199.     dc.w    -40,40,-40,40,-40,40,-40
  200.     dc.w    -40,40,-40,40,-40,0,0
  201.     dc.w    -40,40,-40,40,-40,40,-40
  202.     dc.w    -40,40,-40,40,0,0,0
  203.     dc.w    -40,40,-40,40,-40,40,-40
  204.     dc.w    -40,40,-40,0,0,0,0
  205.     dc.w    -40,40,-40,40,-40,40,-40
  206.     dc.w    -40,40,0,0,0,0,0
  207.     dc.w    -40,40,-40,40,-40,40,-40
  208.     dc.w    -40,0,0,0,0,0,0
  209.     dc.w    -40,40,-40,40,-40,40,-40
  210.     dc.w    0,0,0,0,0,0,0
  211.     dc.w    -40,40,-40,40,-40,40,0
  212.     dc.w    0,0,0,0,0,0,0
  213.     dc.w    -40,40,-40,40,-40,0,0
  214.     dc.w    0,0,0,0,0,0,0
  215.     dc.w    -40,40,-40,40,0,0,0
  216.     dc.w    0,0,0,0,0,0,0
  217.     dc.w    -40,40,-40,0,0,0,0
  218.     dc.w    0,0,0,0,0,0,0
  219.     dc.w    -40,40,0,0,0,0,0
  220.     dc.w    0,0,0,0,0,0,0
  221.     dc.w    -40,0,0,0,0,0,0
  222.     dc.w    0,0,0,0,0,0,0
  223.     dc.w    0,0,0,0,0,0,0
  224.     dc.w    0,0,0,0,0,0,0
  225.     dc.w    $ffff            ; end of list
  226.  
  227. Wave_Ptr:    dc.l    Wave_Table        ; address of wave table
  228.  
  229. GraphicsName:    dc.b    'graphics.library',0
  230.         EVEN
  231.     
  232. ***********************************************************
  233.  
  234.         section    squid,data_c
  235.         
  236. Copper:    dc.w    $0100,$1200        ; bit plane control reg.0
  237.     dc.w    $0102,$0000        ; scroll value
  238.     dc.w    $0104,$0000        ; blp/sprite priority reg.
  239.     dc.w    $0108,$0000        ; odd bitplane modulo value
  240.     dc.w    $010a,$0000        ; even bitplane modulo value
  241.     dc.w    $0180,$0000        ; color00 = black
  242.     dc.w    $0182,$0fff        ; color01 = white
  243.     dc.w    $008e,$2c81        ; upper left corner of disp. window
  244.     dc.w    $0090,$f4c1        ; lower right corner of disp. window
  245.     dc.w    $0092,$0038        ; start of bpl. (horizontal)
  246.     dc.w    $0094,$00d0        ; endo of bpl. (horizontal)
  247. bmapptrs:dc.w    $00e0,$0000        ; adr of bplane 1 (long - 2 words)
  248.     dc.w    $00e2,$0000        ; low word of bplane 1 adr
  249. sprptrs:dc.w    $0120,$0000
  250.     dc.w    $0122,$0000
  251.     dc.w    $0124,$0000
  252.     dc.w    $0126,$0000
  253.     dc.w    $0128,$0000
  254.     dc.w    $012a,$0000
  255.     dc.w    $012c,$0000
  256.     dc.w    $012e,$0000
  257.     dc.w    $0130,$0000
  258.     dc.w    $0132,$0000
  259.     dc.w    $0134,$0000
  260.     dc.w    $0136,$0000
  261.     dc.w    $0138,$0000
  262.     dc.w    $013a,$0000
  263.     dc.w    $013c,$0000
  264.     dc.w    $013e,$0000
  265. wavestart:
  266.     dc.w    $510f,$fffe,$0108,$0000        ; odd bitplane modulo value
  267.     dc.w    $520f,$fffe,$0108,$0000        ; odd bitplane modulo value
  268.     dc.w    $530f,$fffe,$0108,$0000        ; odd bitplane modulo value
  269.     dc.w    $540f,$fffe,$0108,$0000        ; odd bitplane modulo value
  270.     dc.w    $550f,$fffe,$0108,$0000        ; odd bitplane modulo value
  271.     dc.w    $560f,$fffe,$0108,$0000        ; odd bitplane modulo value
  272.     dc.w    $570f,$fffe,$0108,$0000        ; odd bitplane modulo value
  273.     dc.w    $580f,$fffe,$0108,$0000        ; odd bitplane modulo value
  274.     dc.w    $590f,$fffe,$0108,$0000        ; odd bitplane modulo value
  275.     dc.w    $5a0f,$fffe,$0108,$0000        ; odd bitplane modulo value
  276.     dc.w    $5b0f,$fffe,$0108,$0000        ; odd bitplane modulo value
  277.     dc.w    $5c0f,$fffe,$0108,$0000        ; odd bitplane modulo value
  278.     dc.w    $5d0f,$fffe,$0108,$0000        ; odd bitplane modulo value
  279.     dc.w    $5e0f,$fffe,$0108,$0000        ; odd bitplane modulo value
  280.     dc.w    $810f,$fffe,$0182,$0000
  281.     dc.l    -2,-2
  282.  
  283. NullSprite:    dc.l    0,0,0    ; 2 controll words,2 data words,2 blank words
  284.  
  285. Bmap:    incbin    "fun.raw"
  286.     
  287.